#include "item.h"
#include "gameMath.h"

Point* Item::playerPoint = NULL;

void Item::setPoint(Point* p)
{
	playerPoint = p;
}

Item::Item(stdItem std, Point p)
{
	setInformation(std, p);
}

void Item::setInformation(stdItem std, Point p)
{
	_std = std;
	_std.bitmap.p = p;
	init = true;
	_follow = false;
	_remove = false;
	_rotate = 0;
	_angle = 0;
	vx = 0;
	vy = -2 * _std.spd;
}

void Item::updata()
{
	check();
	if (playerPoint->y < 60 && key[ALLEGRO_KEY_LSHIFT])
	{
		_follow = true;
	}
	if (_follow == false && (*playerPoint - _std.bitmap.p) < 1000)
	{
		_follow = true;
	}
	if (_follow)
	{
		calcSpd();
	}else
	{
		if (init)
		{
			initupdata();
		}else
			gameupdata();
	}
	move();
}

void Item::draw()
{
	if (init)
	{
		initDraw();
	}else
		gameDraw();
}

bool Item::checkRemove()
{
	return _remove;
}

void Item::initDraw()
{
	al_draw_rotated_bitmap(_std.bitmap.bitmap[0], _std.bitmap.w,
		_std.bitmap.h, _std.bitmap.p.x, _std.bitmap.p.y, _rotate, 0);
}

void Item::gameDraw()
{
	al_draw_bitmap(_std.bitmap.bitmap[0],
		_std.bitmap.p.x -  _std.bitmap.w,
		_std.bitmap.p.y - _std.bitmap.h, 0);
}

void Item::initupdata()
{
	_rotate += _std.rad/2.0;
	vy += 0.01;
	if (vy > 0)
	{
		init = false;
	}
}

void Item::gameupdata()
{
	if (vy < 2)
	{
		vy += 0.01;
	}
}

void Item::check()
{
	if (_std.bitmap.p.y > 480)
	{
		_remove = true;
	}
}

void Item::calcSpd()
{
	if (playerPoint->x > 0 && playerPoint->y > 0)
	{
		
		_angle = al_atan(playerPoint->x - _std.bitmap.p.x,
			playerPoint->y - _std.bitmap.p.y);
	}
	if (_angle < 0)
	{
		vx = -_std.spd * SIN[-_angle];
		vy = _std.spd * COS[-_angle];
	}else 
	{
		vx = _std.spd * SIN[_angle];
		vy = _std.spd * COS[_angle];
	}
}

void Item::move()
{
	_std.bitmap.p.x += vx;
	_std.bitmap.p.y += vy;
}